/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
/* 
为了将有序数组转换为平衡二叉搜索树（BST），可以利用数组的有序性，通过递归分治法构建树结构。
每次选择中间元素作为根节点，确保左右子树的节点数尽可能接近，从而保证树的平衡性。

方法思路
递归分治：有序数组的中间元素是 BST 的根节点，左侧元素构成左子树，右侧元素构成右子树。
选择中间元素：对于偶数长度的数组，中间元素可以是中间两个元素的任意一个（题目允许多种答案）。这里选择右中间元素（例如数组[1,2]选择 2 作为根节点）。
递归构建子树：对左右子数组分别递归应用相同的方法，生成左右子树。
*/
var sortedArrayToBST = function (nums) {
  // 递归辅助函数，根据数组的左右边界构建BST
  const buildBST = (left, right) => {
    if (left > right) {
      return null;
    }

    // 选择右中间元素作为根节点
    const mid = Math.floor((left + right) / 2);

    // 创建当前根节点
    const root = new TreeNode(nums[mid]);

    // 递归构建左子树和右子树
    root.left = buildBST(left, mid - 1);
    root.right = buildBST(mid + 1, right);

    return root;
  };

  // 从整个数组开始构建
  return buildBST(0, nums.length - 1);
};